/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import org.primefaces.event.SelectEvent;
import sv.com.intesal.clases.abstracts.ViewScopedAbstract;
import sv.com.intesal.clases.others.FormularioName.COMPRA.Mtto;
import sv.com.intesal.compra.bean.Linea;
import sv.com.intesal.compra.bean.Marca;
import sv.com.intesal.compra.bean.Producto;
import sv.com.intesal.compra.bean.ProductoSucursal;
import sv.com.intesal.compra.bean.SubLinea;
import sv.com.intesal.compra.bean.TipoProducto;
import sv.com.intesal.compra.bean.Unidad;
import sv.com.intesal.compra.controlador.ProductoControlador;
import sv.com.intesal.compra.controlador.SubLineaControlador;
import sv.com.intesal.general.bean.Sucursal;
import sv.com.intesal.general.controlador.SucursalControlador;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "productoManaged")
public class ProductoManaged extends ViewScopedAbstract {

    private Producto selectedEncaProducto;

    /*PRODUCTO_SUCURSAL*/
    private ProductoSucursal selectedEncaProductoSucursal;
    private ProductoSucursal selectedDetaProductoSucursal;
    private List<ProductoSucursal> productoSucursales;

    /*COMBO BOXES*/
    private List<Marca> marcas;
    private List<TipoProducto> tipoProductos;
    private List<Unidad> unidades;
    private List<Linea> lineas;
    private List<SubLinea> subLineas;
    private List<Sucursal> sucursales;

    public ProductoManaged() {
        this.selectedEncaProducto = new Producto();
        this.selectedEncaProductoSucursal = new ProductoSucursal();
        this.selectedDetaProductoSucursal = new ProductoSucursal();
        this.fillComboBox();
    }

    private void fillComboBox() {
        try {
            ProductoControlador pc = new ProductoControlador();
            ProductoControlador.ComboBox cb = pc.new ComboBox();

            if (marcas == null) {
                marcas = cb.getMarcasActivos();
            }
            if (tipoProductos == null) {
                tipoProductos = cb.getTipoProductosActivos();
            }
            if (unidades == null) {
                unidades = cb.getUnidadesActivos();
            }
            if (lineas == null) {
                lineas = cb.getLineas();
            }
            if (subLineas == null) {
                subLineas = cb.getSubLineas(this.lineas.get(0).getCodigo_l());
            }

            if (sucursales == null) {
                sucursales = cb.getSucursalesActivos();
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void llenarSubLinea() {
        try {
            SubLineaControlador sl = new SubLineaControlador();
            this.subLineas = sl.getSubLineaActivos_x_Linea(this.selectedEncaProducto.getCodigo_l());
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void rowSelectListener(SelectEvent event) {
        /* LLENAR SUBLINEA*/
        try {
            Producto p = ((Producto) event.getObject());
            SubLineaControlador sl = new SubLineaControlador();
            this.subLineas = sl.getSubLineaActivos_x_Linea(p.getCodigo_l());
            this.selectedEncaProducto.setCodigo_sl(p.getCodigo_sl2());
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }

    }

    public void completeTransaction() {
        try {
            if (this.validar() == true) {
                if (this.selectedEncaProducto.getCodigo_l() == null) {
                    if (sm.validar_rol_usuario(Mtto.wfrmProducto, sm.agregar) == true) {
                        ProductoControlador pc = new ProductoControlador();
                        pc.insert(this.selectedEncaProducto, this.productoSucursales);
                        m.messageInfo(m.getIinformation());
                        lm.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario(Mtto.wfrmProducto, sm.modificar) == true) {
                        ProductoControlador pc = new ProductoControlador();
                        pc.update(this.selectedEncaProducto, this.productoSucursales);
                        m.messageInfo(m.getImodificada());
                        lm.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validar() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedEncaProducto.getNombre_p().equals("")) {
                m.messageAdvertencia(m.campoError("NOMBRE"));
                var_return = false;
            }
            if (this.selectedEncaProducto.getDescripcion_p().equals("")) {
                m.messageAdvertencia(m.campoError("DESCRIPCION"));
                var_return = false;
            }

            if (this.selectedEncaProducto.getCodigo_u() == null) {
                m.messageError(m.campoError("UNIDAD"));
                var_return = false;
            }
            if (this.selectedEncaProducto.getCodigo_tp() == null) {
                m.messageError(m.campoError("TIPO PRODUCTO"));
                var_return = false;
            }
            if (this.selectedEncaProducto.getCodigo_m() == null) {
                m.messageError(m.campoError("MARCA"));
                var_return = false;
            }
            if (this.selectedEncaProducto.getCodigo_sl() == null) {
                m.messageError(m.campoError("SUB LINEA"));
                var_return = false;
            }

            if (this.selectedEncaProducto.getCosto_p() == null) {
                m.messageError(m.campoError("COSTO"));
                var_return = false;
            } else if (this.selectedEncaProducto.getCosto_p() <= 0.0) {
                m.messageError("EL COSTO DEBE SER MAYOR QUE CERO");
                var_return = false;
            }

            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    /*******************************************************************************************************************************************************/
    public void mantenimientoPS() {
        try {
            if (this.validarPS() == true) {
                List<ProductoSucursal> lista = new ArrayList<ProductoSucursal>();
                if (this.productoSucursales != null) {
                    lista = this.productoSucursales;
                }
                this.selectedEncaProductoSucursal.setCodigo_p(0);
                this.selectedEncaProductoSucursal.setEstado_ps(v.getEstado(this.selectedEncaProductoSucursal.getEstado_filtro_ps()));

                SucursalControlador sc=new SucursalControlador();
                this.selectedEncaProductoSucursal.setNombre_s(sc.getSucursal(this.selectedEncaProductoSucursal.getCodigo_s()).getNombre_s());

                lista.add(this.selectedEncaProductoSucursal);
                this.productoSucursales = lista;
                this.selectedEncaProductoSucursal = new ProductoSucursal();

            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validarPS() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedEncaProductoSucursal.getCodigo_s() == null) {
                m.messageError("SUCURSAL");
                var_return = false;
            }
            if (this.selectedEncaProductoSucursal.getExistencia_ps() == null) {
                m.messageAdvertencia(m.campoError("EXISTENCIA"));
                var_return = false;
            }
            if (this.selectedEncaProductoSucursal.getMinimo_ps() == null) {
                m.messageAdvertencia(m.campoError("MINIMO"));
                var_return = false;
            }
            if (this.selectedEncaProductoSucursal.getMaximo_ps() == null) {
                m.messageAdvertencia(m.campoError("MAXIMO"));
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void limpiarPS() {
        this.selectedEncaProductoSucursal = new ProductoSucursal();
    }

    public void eliminarPS(){

    }

    /*******************************************************************************************************************************************************/
    public void getQuickProducto(Producto p) {
        this.selectedEncaProducto = p;
        this.productoSucursales = p.getProductoSucursales();
    }

    /*SETTERS AND GETTERS*/
    public List<Linea> getLineas() {
        return lineas;
    }

    public void setLineas(List<Linea> lineas) {
        this.lineas = lineas;
    }

    public List<Marca> getMarcas() {
        return marcas;
    }

    public void setMarcas(List<Marca> marcas) {
        this.marcas = marcas;
    }

    public List<ProductoSucursal> getProductoSucursales() {
        return productoSucursales;
    }

    public void setProductoSucursales(List<ProductoSucursal> productoSucursales) {
        this.productoSucursales = productoSucursales;
    }

    public ProductoSucursal getSelectedDetaProductoSucursal() {
        return selectedDetaProductoSucursal;
    }

    public void setSelectedDetaProductoSucursal(ProductoSucursal selectedDetaProductoSucursal) {
        this.selectedDetaProductoSucursal = selectedDetaProductoSucursal;
    }

    public Producto getSelectedEncaProducto() {
        return selectedEncaProducto;
    }

    public void setSelectedEncaProducto(Producto selectedEncaProducto) {
        this.selectedEncaProducto = selectedEncaProducto;
    }

    public ProductoSucursal getSelectedEncaProductoSucursal() {
        return selectedEncaProductoSucursal;
    }

    public void setSelectedEncaProductoSucursal(ProductoSucursal selectedEncaProductoSucursal) {
        this.selectedEncaProductoSucursal = selectedEncaProductoSucursal;
    }

    public List<SubLinea> getSubLineas() {
        return subLineas;
    }

    public void setSubLineas(List<SubLinea> subLineas) {
        this.subLineas = subLineas;
    }

    public List<Sucursal> getSucursales() {
        return sucursales;
    }

    public void setSucursales(List<Sucursal> sucursales) {
        this.sucursales = sucursales;
    }

    public List<TipoProducto> getTipoProductos() {
        return tipoProductos;
    }

    public void setTipoProductos(List<TipoProducto> tipoProductos) {
        this.tipoProductos = tipoProductos;
    }

    public List<Unidad> getUnidades() {
        return unidades;
    }

    public void setUnidades(List<Unidad> unidades) {
        this.unidades = unidades;
    }
}
